package ar.edu.utn.frba.dds.aterrizar.aerolineas;

import java.util.ArrayList;

import ar.edu.utn.frba.dds.aterrizar.busquedas.Vuelo;
import ar.edu.utn.frba.dds.aterrizar.mocks.MockAerolineaLanchita;
import ar.edu.utn.frba.dds.aterrizar.usuarios.Usuario;

public class AerolineaLanchitaAdapter extends AerolineasInterface {

	private static final AerolineaLanchitaAdapter INSTANCE = new AerolineaLanchitaAdapter();

	private static MockAerolineaLanchita thisAerolinea;

	public static AerolineaLanchitaAdapter getInstance() {
		thisAerolinea = new MockAerolineaLanchita();
		return INSTANCE;
	}
	
	protected void comprarElVuelo(Vuelo vuelo, Usuario usuario) {
		thisAerolinea.comprar(vuelo.getCodigoDeVuelo()+"-"+vuelo.getCodigoDeAsiento());
	}
	
	protected void reservarElVuelo(Vuelo vuelo, Usuario usuario) {
		thisAerolinea.reservar(vuelo.getCodigoDeVuelo()+"-"+vuelo.getCodigoDeAsiento(), usuario.getDNI());
	}
	
	public ArrayList<Vuelo> getAsientosTotales() {
		String[][] asientosTotales = thisAerolinea.asientos(null, null, null, null, null, null);
		return operador.getVuelosComoArray(asientosTotales, this);
	}

	public ArrayList<Vuelo> getAsientosBuscados(String origen, String destino,
			String fechaSalida, String horaSalida, String fechaLlegada,
			String horaLlegada) {
		String[][] asientosBuscados = thisAerolinea.asientosDisponibles(origen, destino, fechaSalida, horaSalida, fechaLlegada, horaLlegada);
		return operador.getVuelosComoArray(asientosBuscados, this);
	}
	
	public ArrayList<Vuelo> getAsientosBuscadosIncluyendoReservados(String origen, String destino,
			String fechaSalida, String horaSalida, String fechaLlegada, String horaLlegada) {
		return getAsientosTotales();
	}
	public String quienSoy()
	{
		return "Lanchita";
	}
	private String[] getCodigoDeVueloYDeAsiento(String codigoCompleto) {
		String[] codigos = codigoCompleto.split("-");
		return codigos;
	}
	
	public Vuelo crearVuelo(String[] unVuelo) {
		String[] codigos = getCodigoDeVueloYDeAsiento(unVuelo[0]);
		return new Vuelo(codigos[0], codigos[1], unVuelo[1], unVuelo[2], unVuelo[3], unVuelo[4], unVuelo[5], unVuelo[6], unVuelo[7], unVuelo[8], unVuelo[9], unVuelo[10], unVuelo[11], this);
	}
	
}
